package com.sea.base.ext.obs

import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import androidx.lifecycle.currentVersion

/**
 * 带this的inline版实现
 */
inline fun <T> observerObj(crossinline callback: Observer<T>.(T) -> Unit): Observer<T> {
    return object : Observer<T> {
        override fun onChanged(t: T) {
            callback.invoke(this, t)
        }
    }
}

/**
 *  忽略默认的数据，从下一次开始接收（类似EventBus）
 */
inline fun <T> LiveData<T>.observerNexObj(crossinline obs: Observer<T>.(T) -> Unit): Observer<T> {
    val initVersion = currentVersion
    return observerObj {
        if (currentVersion > initVersion) {
            this.obs(it)
        }
    }
}